

import Mock, { Random } from 'mockjs';  // 引入mock核心库
import db from '../lowdb'; // 引入数据库模块
import _ from 'lodash'

// 定义数据库项——相当于一张表

let user = [];

// 定义初始数据总量
const count = 2;

// 如果该表不存在或者表中没有数据，则创建新数据存储数据库，否则返回已经存在的数据
if (db && db.get('user').size().value()) {  // size()获取数据表总量
    user = db.get('user').value(); // get()...value() 从数据库获取数据  
} else {
    for (let i = 0; i < count; i++) {
        user.push(Mock.mock({
            'avatar': '@image(100x100)',  // 随机生成一个地名
            'username': '@cname',  // 一个自增数
            'nickname': '',
            'password': 'qwe123',  // 中文姓名
            'phonenumber': '@integer(1,11)', // 生成一个自定义日期
            'sex|1': ['1', '0'], // 男或女
            'email': '@email', // 中文段落
            'userId': Mock.Random.id(), // 指定生成某个范围内的整数
        }));
    }
    db.set('user', user).write();  // set() 新建或重写一个表， .write（）执行写入操作
}



// 导出每个接口的模拟逻辑
export default [
    {
        url: '/login', //获取列表  // 调用地址库的键，可以应对真实接口地址的变化，保持API层的稳定性
        type: 'post',
        isMock: true,  // 是否开启mock，这个开关可以将mock开关控制到具体接口
        response: (config) => {
            const body = config.body;
            const userInfo = _.find(user, (item) => item.password == body.password && item.username == body.username)
            console.log(config)
            return userInfo ? {
                code: 200,
                msg: '登录成功',
                token: Random.guid(), // 假的 
                userInfo
            } : {
                code: 400,
                msg: '登录失败',
            }
        }
    },
    {
        url: 'register',
        type: 'post',
        isMock: true,
        response: (req) => {
            // 注册 
            const body = req.body;
            const userInfo = _.find(user, (item) => (item.userName == body.userName || item.phonenumber == body.phonenumber))
            console.log(userInfo)

            if (userInfo) {
                return {
                    code: 400,
                    msg: '注册失败,用户名或者手机号已经存在'
                }
            } else {
                // 直接插入 
                console.log(body)
                body.userId = Mock.Random.id()
                user.unshift(body)
                db.set('user', user).write();
                return {
                    code: 200,
                    msg: '注册成功'
                }
            }
        }
    },
    {
        url: '/getInfo',
        type: "get",
        isMock: true,
        response: (req) => {
            console.log(req)
            const query = req.query;
            if (query.userName) {
                const userInfo = _.find(user, (item) => (item.userName == query.userName))
                return {
                    code: 200,
                    msg: '成功1',
                    user: userInfo
                }
            } else {
                return {
                    code: 400,
                    msg: '参数不正确'
                }
            }
        }
    },
    {
        url: '/prod-api/api/common/user/resetPwd',
        type: "put",
        isMock: true,
        response: (req) => {
            console.log(req)
            const {
                userName,
                newPassword,
                oldPassword
            } = req.body;
            if (userName) {
                // 修改用户信息 
                const userInfo = _.find(user, (item) => (item.userName == userName))
                if (userInfo.password == oldPassword) {
                    // user = user.map((item) => {
                    //     if (item.userName ==userName) {
                    //         item = { ...item, password:newPassword }
                    //     }
                    //     return item;
                    // })
                    // db.set('user', user).write();
                    db.get('user')
                    .find({userName})
                    .assign({password:newPassword})
                    .write()
                    

                    return {
                        code: 200,
                        msg: "密码重置成功"
                    }
                } else {
                    return {
                        code: 400,
                        msg: '旧密码不正确'
                    }
                }
            } else {
                return {
                    code: 400,
                    msg: '参数不正确'
                }
            }
        }
    },
    {
        url: '/prod-api/api/common/user',
        type: "put",
        isMock: true,
        response: (req) => {
            console.log(req)
            const body = req.body;
            if (body.userName) {
                // 修改用户信息 
                user = user.map((item) => {
                    if (item.userName == body.userName) {
                        item = { ...item, ...body }
                    }
                    return item;
                })
                db.set('user', user).write();
                return {
                    code: 200,
                    msg: '修改成功'
                }
            } else {
                return {
                    code: 400,
                    msg: '参数不正确'
                }
            }
        }
    },
];

